/** Project 3
 *
 * @Group Members
 * 	Brentton Garber - mrbrentgarber@gmail.com
 * 	Georgii Tkachuk - georgii.t@gmail.com
 * 	Lucas Bridge - ltbridge@asu.edu
 * 	Austin Burnham - burnhamaustin@gmail.com
 * 	Kevin Greenberg - kgreenbe@asu.edu
 * @Revision
 *
 * @Since
 *
 */

#ifndef CSE220_project3_common_h
#define CSE220_project3_common_h

#define FORM_FEED_CHAR          '\f'

#define MAX_FILE_NAME_LENGTH    32
#define MAX_SOURCE_LINE_LENGTH  256
#define MAX_PRINT_LINE_LENGTH   80
#define MAX_LINES_PER_PAGE      50
#define DATE_STRING_LENGTH      26
#define MAX_TOKEN_STRING_LENGTH MAX_SOURCE_LINE_LENGTH
#define MAX_CODE_BUFFER_SIZE    4096

#define EOF_CHAR                '\x7f'
#define TAB_SIZE                8

#define MAX_INTEGER             32767
#define MAX_DIGIT_COUNT         20
#define MAX_EXPONENT            37

#define MIN_RESERVED_WORD_LENGTH    2
#define MAX_RESERVED_WORD_LENGTH    9


#include <iostream>
#include <time.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

typedef enum
{
    LETTER, DIGIT, QUOTE, SPECIAL, EOF_CODE,
}
CharCode;

typedef enum 
{
    INTEGER_LIT, REAL_LIT, STRING_LIT,
}
LiteralType;

typedef enum
{
    NO_TOKEN, IDENTIFIER, NUMBER, STRING, UPARROW, STAR, LPAREN, 
    RPAREN, MINUS, PLUS, EQUAL, LBRACKET, 
    RBRACKET, COLON, SEMICOLON, LT, GT, COMMA, PERIOD, SLASH, 
    COLONEQUAL, LE, GE, NE, DOTDOT, END_OF_FILE, ERROR, AND, 
    ARRAY, BEGIN, CASE, CONST, DIV, DO, DOWNTO, ELSE, END, FFILE,
    FOR, FUNCTION, GOTO, IF, IN, LABEL, MOD, NIL, NOT, OF, OR, PACKED, 
    PROCEDURE, PROGRAM, RECORD, REPEAT, SET, THEN, TO, TYPE, UNTIL,
    VAR, WHILE, WITH, 
}
TokenCode;

#endif
